/**
 * 
 */
package br.com.ufc.apsoo.hotelar.dao.impl;

import java.util.Date;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.ufc.apsoo.hotelar.dao.ServicoHospedagemDao;
import br.com.ufc.apsoo.hotelar.model.Hospedagem;
import br.com.ufc.apsoo.hotelar.model.Servico;
import br.com.ufc.apsoo.hotelar.model.ServicoHospedagem;
import br.com.ufc.apsoo.hotelar.utils.HibernateUtil;

/**
 * @author Virginia
 *
 */
public class ServicoHospedagemDaoImpl implements ServicoHospedagemDao {

	@Override
	public void save(ServicoHospedagem servicoHospedagem) {
		Session session = HibernateUtil.getSession();
		Transaction t = session.beginTransaction();
		session.save(servicoHospedagem);
		t.commit();
		session.close();		
	}

	@Override
	public void remove(ServicoHospedagem servicoHospedagem) {
		Session session = HibernateUtil.getSession();
		Transaction t = session.beginTransaction();
		session.delete(servicoHospedagem);
		t.commit();
		session.close();		
	}

	@Override
	public void update(ServicoHospedagem servicoHospedagem) {
		Session session = HibernateUtil.getSession();
		Transaction t = session.beginTransaction();
		session.update(servicoHospedagem);
		t.commit();
		session.close();		
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<ServicoHospedagem> list() {
		Session session = HibernateUtil.getSession();
		try {
			return session.createCriteria(ServicoHospedagem.class).list();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.close();
		}
		return null;
	}

	@Override
	public List<ServicoHospedagem> getServicoHospedagemByServico(Servico servico) {
		// TODO Auto-generated method stub
		return null;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<ServicoHospedagem> getServicoHospedagemByHospedagem(
			Hospedagem hospedagem) {
		Session session = HibernateUtil.getSession();
		String query = "from ServicoHospedagem where hospedagem = :hospedagem";
		try {
			return session.createQuery(query).setInteger("hospedagem", hospedagem.getId()).list();
		} catch (Exception e) {
			System.out.println("TESTE" + e);
			e.printStackTrace();
		} finally {
			session.close();
		}
		return null;
	}

	@Override
	public List<ServicoHospedagem> getServicoHospedagemByCliente(
			Hospedagem hospedagem) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ServicoHospedagem getServicoHospedagemById(Integer id) {
		// TODO Auto-generated method stub
		return null;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<ServicoHospedagem> getServicosMaisFaturaramMesAnterior(Date data) {
		Session session = HibernateUtil.getSession();
		String query = "from ServicoHospedagem s where s.data BETWEEN :data AND :data";
		try {
			return session.createQuery(query).setDate("data", data).list();
		} catch (Exception e) {
			System.out.println("TESTE" + e);
			e.printStackTrace();
		} finally {
			session.close();
		}
		return null;
	}

}
